﻿using System;
using System.Data;
using DTO.Clases;
using Npgsql;

namespace DataAccessLayer.Clases
{
    /// <summary>
    /// Representa una clase de transacciones a Base de Datos de Egreso.
    /// </summary>
    public class DaoEgreso
    {
        /// <summary>
        /// Representa el objeto de conexión.
        /// </summary>
        private Conexion miConexion;

        /// <summary>
        /// Representa una sentenca en sql.
        /// </summary>
        private NpgsqlCommand miComando;

        /// <summary>
        /// Representa la función: insertar_egreso.
        /// </summary>
        private string Ingresar = "insertar_egreso";


        /// <summary>
        /// Representa el texto: Ocurrió un error al ingresar el Egreso.
        /// </summary>
        private string ErrorIngresar = "Ocurrió un error al ingresar el Egreso.\n";

        /// <summary>
        /// Inicializa una nueva instancia de la clase DaoEgreso.
        /// </summary>
        public DaoEgreso()
        {
            this.miConexion = new Conexion();
        }

        /// <summary>
        /// Ingresa el registro de un Egreso a la Base de Datos.
        /// </summary>
        /// <param name="egreso">Egreso a ingresar.</param>
        public void IngresarEgreso(Egreso egreso)
        {
            try
            {
                CargarComando(Ingresar);
                miComando.Parameters.AddWithValue("baseCaja", egreso.IdBaseCaja);
                miComando.Parameters.AddWithValue("formaPago", egreso.IdPago);
                miComando.Parameters.AddWithValue("numero", egreso.Numero);
                miComando.Parameters.AddWithValue("hora", egreso.Hora.TimeOfDay);
                miComando.Parameters.AddWithValue("concepto", egreso.Concepto);
                miComando.Parameters.AddWithValue("valor", egreso.Valor);
                miComando.Parameters.AddWithValue("registradora", egreso.Registradora);
                miConexion.MiConexion.Open();
                miComando.ExecuteNonQuery();
                miConexion.MiConexion.Close();
                miComando.Dispose();
            }
            catch (Exception ex)
            {
                throw new Exception(ErrorIngresar + ex.Message);
            }
            finally { miConexion.MiConexion.Close(); }
        }

        /// <summary>
        /// Inicializa una nueva instancia de NpgsqlCommand de tipo StoredProcedure.
        /// </summary>
        /// <param name="cmd">Comando a ejecutar.</param>
        private void CargarComando(string cmd)
        {
            miComando = new NpgsqlCommand();
            miComando.Connection = miConexion.MiConexion;
            miComando.CommandType = CommandType.StoredProcedure;
            miComando.CommandText = cmd;
        }
    }
}